using System; using System.Collections.Generic; using System.Linq; using System.Text; using ArtificialIntelligence; using Roslyn.Compilers; using Roslyn.Compilers.CSharp; using SymbolicComputation.AI; namespace SymbolicComputation { public class IsolateSingleVariable : SolveEquationBase { String variableBeingSolvedFor; public static String IsolateEquation(String transformMe, String inVariableBeingSolvedFor) { IsolateSingleVariable iso = new IsolateSingleVariable(); return iso.Isolate(transformMe, inVariableBeingSolvedFor); } public String Isolate(String transformMe, String inVariableBeingSolvedFor) { variableBeingSolvedFor = inVariableBeingSolvedFor; return Isolate(Miscellaneous.EquationToSyntaxNode(transformMe),variableBeingSolvedFor).ToString(); } public SyntaxNode Isolate(SyntaxNode transformMe, String inVariableBeingSolvedFor) { variableBeingSolvedFor = inVariableBeingSolvedFor; ai.trimmedJobStatePopulation = 100; ai.maxWhileLoops = 1000; return Solve(transformMe); } public override void AssessJob(Job passJob) { SyntaxNode equation = passJob.jobState; Double assessment = 0; assessment -= equation.ToString().Length; assessment -= Assessers.VariablesOnRight(equation.ToString(), variableBeingSolvedFor) * 100; assessment -= Assessers.RepeatedVariables(equation, variableBeingSolvedFor) * 50; String eq = equation.ToString(); List<String> sides = Miscellaneous.Split(eq, "=="); if (sides[1].Contains(variableBeingSolvedFor) == false) { assessment -= sides[0].Length * 1; assessment += 1000; } if (sides[0] == variableBeingSolvedFor) { assessment += 1000; passJob.approved = true; } passJob.assessment = assessment; } } }